/*
Problem Description
还记得中学时候学过的杨辉三角吗？具体的定义这里不再描述，你可以参考以下的图形：
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
Input
输入数据包含多个测试实例，每个测试实例的输入只包含一个正整数n（1<=n<=30），表示将要输出的杨辉三角的层数。
Output
对应于每一个输入，请输出相应层数的杨辉三角，每一层的整数之间用一个空格隔开，每一个杨辉三角后面加一个空行。
Sample Input
2 3
Sample Output
1
1 1

1
1 1
1 2 1

思路：根据题目所给的三角形的例子，找出规律。下一行的数为上两个数之和。
*/
#include<iostream>
#include<cstdio>

using namespace std;

int main(int argc, char const *argv[])
{
    int num[35][35] = {0,1};
    int n;

    while(~scanf("%d",&n)){
        
        int i,j;

        for(i = 1;i <= n;i++){
            for(j = 1;j <= i;j++){
                num[i][j] = num[i-1][j-1] + num[i-1][j];
                if(j == 1){
                    printf("%d",num[i][j]);
                }else{
                    printf(" %d",num[i][j]);
                }
                
            }
            printf("\n");
        }
        printf("\n");
    }
    return 0;
}
